"""
名片管理系统工具类
"""

# 定义记录所有名片的列表
card_list = []

def print_lines(char, times):
    """根据指定的字符和次数打印分割线
    @param char 分割线字符
    @param times 分割线字符重复次数
    """
    print(char * times)


def show_menu():
    """显示系统功能菜单
    """
    print_lines("*", 50)
    print("欢迎使用【名片管理系统】V1.0")
    print("")
    print("1. 新增名片")
    print("2. 显示全部")
    print("3. 搜索名片")
    print("")
    print("0. 退出系统")

    print_lines("*", 50)


def new_card():
    """新增名片"""
    print_lines("-", 50)
    print("新增名片")

    # 收集用户信息
    card_dict = input_card()
    # 将名片字典添加到名片列表中
    card_list.append(card_dict)
    print(card_list)

    # 4 提示用户添加成功
    print("√ 添加 %s 的名片成功" % card_dict["name"])


def show_all():
    """显示所有名片"""
    print_lines("-", 50)
    print("显示所有名片")
    # 判断名片是否存在，如果没有，提示用户并返回
    check_card_list()
    # 显示表头
    print_table_header()
    # 遍历名片列表，依次显示名片信息
    for card_dict in card_list:
        print_card(card_dict)


def search_card():
    """搜索名片"""
    print_lines("-", 50)
    print("搜索名片")
    # 提示用户要搜索的名片姓名
    find_name = input("请输入要搜索的姓名：")
    # 搜索名片
    find_card(find_name)


def check_card_list():
    """判断名片列表是否存在名片记录"""
    if len(card_list) == 0:
        print("当前没有任何名片记录，请使用新增功能添加名片！")
        return 

def print_table_header():
    """打印表头"""
    # 显示表头
    for title in ["姓名", "电话", "QQ", "邮箱"]:
        print("%s\t\t" % title, end="")
    
    print("")
    print_lines("-", 50)


def print_card(card_dict):
    """打印名片详细信息"""
    print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"], card_dict["phone"], card_dict["qq"], card_dict["email"]))


def input_card():
    """收集用户输入信息"""
    # 1 提示用户输入名片的详细信息
    name = input("请输入姓名：")
    phone = input("请输入电话：")
    qq = input("请输入QQ号码：")
    email = input("请输入邮箱：")

    # 2 使用用户输入的信息建立一个名片字典
    card_dict = { "name": name, "phone": phone, "qq": qq, "email": email }
    return card_dict


def find_card(find_name):
    """搜索名片
    @param find_name 要搜索的姓名
    """
    # 遍历名片列表，查询搜索的姓名，如果没有找到，提示用户
    for card_dict in card_list:
        if find_name == card_dict["name"]:
            print("%s 信息如下：")
            print("=", 50)
            # 显示表头
            print_table_header()
            # 显示名片详细信息
            print_card(card_dict)
            print_lines("-", 50)
            break
    else:
        print("抱歉，没有找到 %s " % find_name)
